#include "editor.h"


/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
CEditor::CEditor()
{
}

/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
CEditor::~CEditor()
{
	Liberar();
}

/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
Bool CEditor::Inicializar(CPantalla *pPantalla,char szNombreArchivo[255])
{
   	char path_file[255];
   	
   	FILE *fichero;
   	
	strcpy(path_file,"");
	strcpy(path_file,PATH_NIVELES);	
	strcat(path_file,szNombreArchivo);
	
	fichero=fopen(path_file,"r+b");	
	
	if(!fichero)
	{	
		printf("! AVISO: El escenario [%s], no existe. Creamos uno nuevo.\n",path_file);
		ResetearEscenario();
		GrabarEscenario(szNombreArchivo);
		fichero=fopen(path_file,"r+b");
	}
		
	if(!fichero)
	{
		printf("! ERROR: No se puede abrir, ni crear el fichero [%s]\n",path_file);		
		return FALSE;
	}

	if(!fread(&m_tEscenario,sizeof(TEscenario),1, fichero ))
	{
		printf("! ERROR: No se puede leer el escenario\n");		
		fclose(fichero);
		return FALSE;
	}
	
	fclose(fichero);

	m_Fuente.Iniciar("font.png");
	m_Fuente.setEscala(0.02);
	m_Fuente.setColor(1,0,1);
	
	SDLKey teclas[NUM_TECLAS];
	teclas[IZQUIERDA]=	SDLK_a;
	teclas[DERECHA]=	SDLK_d;
	teclas[ARRIBA]=		SDLK_r;
	teclas[ABAJO]=		SDLK_s;
	teclas[DISPARO]=	SDLK_h;
	teclas[SALTO]=		SDLK_j;	
	m_Controles.Inicializar(teclas);
			
	m_Recursos.CargarTexturasEscenario();
	m_Recursos.CargarTexturasScrolls(0);
	m_Recursos.CargarTexturasEditor();
	
	m_Pantalla=pPantalla;	
	
	m_Escenario.Iniciar(&m_Recursos);
	m_Escenario.setEscenario(&m_tEscenario);
	
	m_Pantalla->setFollowMe(&m_EntidadDummy);
	m_Pantalla->setEscenario(&m_Escenario);
	
	return TRUE;	
}


/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::Liberar()
{
	GrabarEscenario();	
	m_Recursos.Liberar();
	m_Fuente.Liberar();
	printf("- Editor Liberado\n");
}
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::GrabarEscenario(char szNombreArchivo[255])
{
   	char path_file[255];
   	FILE *fichero;
   	
   	fichero=NULL;
	strcpy(path_file,PATH_NIVELES);
	strcat(path_file,szNombreArchivo);
	
	fichero=fopen(path_file,"w+b");
	if(!fichero)
	{
		printf("! ERROR: No se puede abrir el fichero [%s] para salvar.\n",path_file);
		return;
	}
	
	if(!fwrite( &m_tEscenario, sizeof(TEscenario), 1, fichero ))
		printf("! ERROR: No se puede salvar el escenario\n");
		
	fclose(fichero);
}

/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::ResetearEscenario()
{
	int i,j;
	
	m_tEscenario.m_uiAlto=MAX_ALTURA_BLOQUES;	
	m_tEscenario.m_uiLargo=MAX_LARGO_BLOQUES;
	
	strcpy(m_tEscenario.m_sNombre,"Nivel Nuevo");
	strcpy(m_tEscenario.m_sDirBase,PATH_FASES);
	strcpy(m_tEscenario.m_sDirFase,PATH_BAMBOO);
	
	for (i=0;i<m_tEscenario.m_uiAlto;i++)	
		for (j=0;j<m_tEscenario.m_uiLargo;j++)		
			m_tEscenario.m_aBloques[i][j]=-1;
		
		
	for (j=0;j<m_tEscenario.m_uiLargo;j++)
		m_tEscenario.m_aBloques[m_tEscenario.m_uiAlto-1][j]=5+(j%2);	

}
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::Editar()
{
	SDL_Event 	event;
	int fin=0;
	char tx[255];
  	int x,y;
	float xf,yf;
	
	while ( !fin ){		
		
	    while ( SDL_PollEvent( &event ) ){
		    switch( event.type ){
   	   			/*case SDL_ACTIVEEVENT:
				    if ( event.active.gain == 0 )
						isActive = FALSE;
				    else
						isActive = TRUE;
			    break;	*/

				case SDL_QUIT:	
				    fin = TRUE;
			    break;
			    
			    case SDL_KEYDOWN:
					if(event.key.keysym.sym==SDLK_ESCAPE)
					    fin = TRUE;					    
			    break;
			    
				default:
			    break;
			}
		}
				
		x=0;y=0;
			
		SDL_GetMouseState(&x, &y);
			
		xf=float(x);
		yf=float(y);
						
		x=m_Escenario.f2celdaX(((xf/(ANCHO/2))-1)+m_Escenario.getX());
		y=m_Escenario.f2celdaY(((-yf/(ALTO/2))+1)+m_Escenario.getY());
   
		
		Actualizar();
		m_Pantalla->Dibujar();		   
		
//	    scroll.Dibujar();			      			  			
		m_Escenario.setX(m_Pantalla->getCamX());
	    m_Escenario.Dibujar(); 
  		DibujarCursor(x,y);	
  		
  		sprintf(tx,"%d,%d",x,y);
  		m_Fuente.Escribir3D(m_Escenario.celda2fX(x)+(LARGO_BLOQUE*2),m_Escenario.celda2fY(y)+0.05,-0.5,tx,ALINEACION_IZQUIERDA);
  		
  		sprintf(tx,"Ancho:%i  Alto:%i",m_tEscenario.m_uiLargo,m_tEscenario.m_uiAlto);
  		m_Fuente.Escribir(-0.74,-1+0.015,m_tEscenario.m_sNombre,ALINEACION_IZQUIERDA);
  		m_Fuente.Escribir(-0.64,-1+0.046,tx,ALINEACION_IZQUIERDA);

   		    
	    m_Pantalla->Actualizar(); 		
	}
}
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::Actualizar()
{
	m_Controles.Actualizar();
	
	if(m_Controles.Pulsada(DERECHA))							
		m_EntidadDummy.setX(m_EntidadDummy.getX()+0.005);		
	
	if(m_Controles.Pulsada(IZQUIERDA) && m_EntidadDummy.getX()>0)							
		m_EntidadDummy.setX(m_EntidadDummy.getX()-0.005);		
		
	if(m_Controles.Pulsada(DISPARO))
		m_ModoEdicionActual=MODO_PINCEL_PLATAFORMA;

	if(m_Controles.Pulsada(SALTO))
		m_ModoEdicionActual=MODO_BORRAR;
		
	if(m_Controles.Pulsada(ARRIBA))
		ResetearEscenario();

	
	int x,y,raton_click;
	float xf,yf;
	
	x=0;y=0;
			
	raton_click=SDL_GetMouseState(&x, &y);
			
	xf=float(x);
	yf=float(y);
						
	x=m_Escenario.f2celdaX(((xf/(ANCHO/2))-1)+m_Escenario.getX());
	y=m_Escenario.f2celdaY(((-yf/(ALTO/2))+1)+m_Escenario.getY());
	
	if(raton_click && SDL_BUTTON(1))
		switch (m_ModoEdicionActual)
		{
		
			case MODO_PINCEL_SUELO:
				AniadirBloque(x,y);
			break;
			case MODO_PINCEL_PLATAFORMA:
				AniadirBloquePlataforma(x,y);
			break;
			case MODO_BORRAR:
				if(m_tEscenario.m_aBloques[y][x]<TEXTURA_PLAT_INICIO)
					EliminarBloque(x,y);
				else
					EliminarBloquePlataforma(x,y);
			break;
			default:
			break;			
		}		
}
	
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::DibujarCursor(int x,int y)
{
   	glPushMatrix();
    glLoadIdentity();
	glTranslatef(m_Escenario.celda2fX(x)+(LARGO_BLOQUE/2),m_Escenario.celda2fY(y),0);	
	glBindTexture( GL_TEXTURE_2D, 0 );
		
	glColor3f(1,0,1);	
	glLineWidth(3);
   	glBegin( GL_LINES );
   	  glVertex3f( -0.05f,-0.05f,  0.0f );
   	  glVertex3f(  0.05f,-0.05f,  0.0f );     
   	  glVertex3f( -0.05f, 0.05f,  0.0f );
   	  glVertex3f(  0.05f, 0.05f,  0.0f );     
    	  
   	  glVertex3f( -0.05f, -0.05f, 0.0f );
   	  glVertex3f( -0.05f,  0.05f, 0.0f );     
   	  glVertex3f(  0.05f, -0.05f, 0.0f );
   	  glVertex3f(  0.05f,  0.05f, 0.0f );     
   	glEnd( ); 


	m_Recursos.getTexturaEditor(int(m_ModoEdicionActual))->Bind();
	glColor3f(1,1,1);
	glBegin(GL_TRIANGLES);	  
      glTexCoord2f( 0.01f,  0.99f ); glVertex3f( -(LARGO_BLOQUE/3)+0.05, -(LARGO_BLOQUE/3)-0.05,  0.0f );
      glTexCoord2f( 0.99f,  0.99f ); glVertex3f(  (LARGO_BLOQUE/3)+0.05, -(LARGO_BLOQUE/3)-0.05,  0.0f );
      glTexCoord2f( 0.99f,  0.01f ); glVertex3f(  (LARGO_BLOQUE/3)+0.05,  (LARGO_BLOQUE/3)-0.05,  0.0f );
      
      glTexCoord2f( 0.01f,  0.99f ); glVertex3f( -(LARGO_BLOQUE/3)+0.05, -(LARGO_BLOQUE/3)-0.05,  0.0f );
      glTexCoord2f( 0.99f,  0.01f ); glVertex3f(  (LARGO_BLOQUE/3)+0.05,  (LARGO_BLOQUE/3)-0.05,  0.0f );
      glTexCoord2f( 0.01f,  0.01f ); glVertex3f( -(LARGO_BLOQUE/3)+0.05,  (LARGO_BLOQUE/3)-0.05,  0.0f );     
    glEnd( );	    
	glPopMatrix();	
	
}

/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::AniadirBloquePlataforma(int x,int y)
{

	int j;
	int result=0;
	int cont=1;
	
	if(m_tEscenario.m_aBloques[y][x]!=-1 || y==m_tEscenario.m_uiAlto-1)
		return;

	for(j=x-1;j<=x+1;j++)
		{
			if(j!=x)
			{
				if(j>=0 && m_tEscenario.m_aBloques[y][j]!=-1 && j<m_tEscenario.m_uiLargo)
					result+=cont;
				
				cont++;
			}
		}		
		
	printf("%i\n",result);
			
	switch(result)
	{
		case 0:
			m_tEscenario.m_aBloques[y][x]=TEXTURA_PLAT_SOLA;
		break;
		
		//[ ]X	
		case 1:
			m_tEscenario.m_aBloques[y][x]=TEXTURA_PLAT_FIN;
			
			if(m_tEscenario.m_aBloques[y][x-1]==TEXTURA_PLAT_SOLA)
				m_tEscenario.m_aBloques[y][x-1]=TEXTURA_PLAT_INICIO;
			else
				m_tEscenario.m_aBloques[y][x-1]=TEXTURA_PLAT_CENTRO;
				
		break;
		
		//X[ ]	
		case 2:
			m_tEscenario.m_aBloques[y][x]=TEXTURA_PLAT_INICIO;
			
			if(m_tEscenario.m_aBloques[y][x+1]==TEXTURA_PLAT_SOLA)
				m_tEscenario.m_aBloques[y][x+1]=TEXTURA_PLAT_FIN;
			else
				m_tEscenario.m_aBloques[y][x+1]=TEXTURA_PLAT_CENTRO;
			

		break;
		//[ ]X[ ]	
		case 3:
			m_tEscenario.m_aBloques[y][x]=TEXTURA_PLAT_CENTRO;
			
			if(m_tEscenario.m_aBloques[y][x+1]==TEXTURA_PLAT_SOLA)
				m_tEscenario.m_aBloques[y][x+1]=TEXTURA_PLAT_FIN;
			else
				m_tEscenario.m_aBloques[y][x+1]=TEXTURA_PLAT_CENTRO;
				
				
			if(m_tEscenario.m_aBloques[y][x-1]==TEXTURA_PLAT_SOLA)
				m_tEscenario.m_aBloques[y][x-1]=TEXTURA_PLAT_INICIO;
			else
				m_tEscenario.m_aBloques[y][x-1]=TEXTURA_PLAT_CENTRO;		
		break;			
		default:
		break;
	}
	
}

/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::EliminarBloquePlataforma(int x,int y)
{

	int j;
	int result=0;
	int cont=1;
	
	if(m_tEscenario.m_aBloques[y][x]==-1)
		return;

	for(j=x-1;j<=x+1;j++)
		{
			if(j!=x)
			{
				if(j>=0 && m_tEscenario.m_aBloques[y][j]!=-1 && j<m_tEscenario.m_uiLargo)
					result+=cont;
				
				cont++;
			}
		}		
		
	printf("%i\n",result);
			
	m_tEscenario.m_aBloques[y][x]=-1;
	
	switch(result)
	{
		case 0:
		break;
		
		//[ ]X	
		case 1:
			
			if(m_tEscenario.m_aBloques[y][x-1]==TEXTURA_PLAT_INICIO)
				m_tEscenario.m_aBloques[y][x-1]=TEXTURA_PLAT_SOLA;
			else
				m_tEscenario.m_aBloques[y][x-1]=TEXTURA_PLAT_FIN;				
		break;
		
		//X[ ]	
		case 2:
			
			if(m_tEscenario.m_aBloques[y][x+1]==TEXTURA_PLAT_FIN)
				m_tEscenario.m_aBloques[y][x+1]=TEXTURA_PLAT_SOLA;
			else
				m_tEscenario.m_aBloques[y][x+1]=TEXTURA_PLAT_INICIO;
			

		break;
		//[ ]X[ ]	
		case 3:
			if(m_tEscenario.m_aBloques[y][x+1]==TEXTURA_PLAT_FIN)
				m_tEscenario.m_aBloques[y][x+1]=TEXTURA_PLAT_SOLA;
			else
				m_tEscenario.m_aBloques[y][x+1]=TEXTURA_PLAT_INICIO;

			if(m_tEscenario.m_aBloques[y][x-1]==TEXTURA_PLAT_INICIO)
				m_tEscenario.m_aBloques[y][x-1]=TEXTURA_PLAT_SOLA;
			else
				m_tEscenario.m_aBloques[y][x-1]=TEXTURA_PLAT_FIN;				

		break;			
		default:
		break;
	}
	
}
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::EliminarBloque(int x,int y)
{
	int result=0;
	int cont=4;
	int i,j;

	if(m_tEscenario.m_aBloques[y][x]==-1)
		return;
	
	for(i=y;i<=y+1;i++)
		for(j=x-1;j<=x+1;j++)
		{
			if(i!=y || j!=x){
				if(i>=0 && j>=0 && m_tEscenario.m_aBloques[i][j]!=-1 && i<m_tEscenario.m_uiAlto && j<m_tEscenario.m_uiLargo)
					result+=cont;
				
				cont++;
			}
		}	
	
	/*if(x>0 && m_tEscenario.m_aBloques[y][x-1]!=-1)
		result+=1;

	if(x<m_tEscenario.m_uiLargo && m_tEscenario.m_aBloques[y][x+1]!=-1)
		result+=2;*/
			
		
	
	
	switch (result)
	{
		case 0:
			m_tEscenario.m_aBloques[y][x]=-1;
		break;
			
		// [ ]
		//  X
	//	case 2:
		//	m_tEscenario.m_aBloques[y][x]=-1;
	//	break;

		//[ ]X
		case 4:
			m_tEscenario.m_aBloques[y][x]=-1;
			if(m_tEscenario.m_aBloques[y][x-1]==4)
				m_tEscenario.m_aBloques[y][x-1]=0;			
			else
				m_tEscenario.m_aBloques[y][x-1]=9;			
		break;

		//X[ ]
		case 5:
			m_tEscenario.m_aBloques[y][x]=-1;
			if(m_tEscenario.m_aBloques[y][x+1]==9)
				m_tEscenario.m_aBloques[y][x+1]=0;			
			else
				m_tEscenario.m_aBloques[y][x+1]=4;			
		break;
		
		// [ ]
		//  X
		// [ ]
		
		//	ó
		
		//  [ ]X[ ]		
		case 9:
		
			m_tEscenario.m_aBloques[y][x]=-1;
			if(y<m_tEscenario.m_uiAlto-1 && m_tEscenario.m_aBloques[y+1][x]!=-1)
			{
				m_tEscenario.m_aBloques[y+1][x]=0;
				break;
			}

			if(m_tEscenario.m_aBloques[y][x+1]==9)
				m_tEscenario.m_aBloques[y][x+1]=0;			
			else
				m_tEscenario.m_aBloques[y][x+1]=4;		
				
			if(m_tEscenario.m_aBloques[y][x-1]==4)
				m_tEscenario.m_aBloques[y][x-1]=0;			
			else
				m_tEscenario.m_aBloques[y][x-1]=9;		
		break;
		
		//  X
		// [ ]
		case 7:
			if(y<m_tEscenario.m_uiAlto-1 && m_tEscenario.m_aBloques[y+1][x]!=-1)
			{
				m_tEscenario.m_aBloques[y][x]=-1;
				m_tEscenario.m_aBloques[y+1][x]=0;
			}
			
		break;

		
		//[ ]X
		//[ ]
		case 10:
		
			m_tEscenario.m_aBloques[y][x]=-1;
			
			if(m_tEscenario.m_aBloques[y][x-1]==4)
				m_tEscenario.m_aBloques[y][x-1]=0;			
			else
				m_tEscenario.m_aBloques[y][x-1]=9;			
		break;
		
		//    X
		//[ ][ ]
		

		//X[ ] 
		// [ ]
		
		case 13:
			if(m_tEscenario.m_aBloques[y+1][x]!=-1)
			{
				m_tEscenario.m_aBloques[y][x]=-1;
				m_tEscenario.m_aBloques[y+1][x]=9;
			
				if(m_tEscenario.m_aBloques[y+1][x-1]==2)
					m_tEscenario.m_aBloques[y+1][x-1]=4;
				else
					m_tEscenario.m_aBloques[y+1][x-1]=5+(x%2);		
			}
			else
			{			
				m_tEscenario.m_aBloques[y][x]=-1;

				if(m_tEscenario.m_aBloques[y][x+1]==9)
					m_tEscenario.m_aBloques[y][x+1]=0;			
				else
					m_tEscenario.m_aBloques[y][x+1]=4;						
			}
			
		break;

		// X
		//[ ][ ]
		case 15:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=4;
			
			if(m_tEscenario.m_aBloques[y+1][x+1]<5)
				m_tEscenario.m_aBloques[y+1][x+1]=9;
			else
				m_tEscenario.m_aBloques[y+1][x+1]=5+(x%2);
			
		break;		
		
		//[ ] X
		//[ ][ ]
		case 17:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=3;
			
			if(m_tEscenario.m_aBloques[y][x-1]==4)
				m_tEscenario.m_aBloques[y][x-1]=0;
			else
			if(m_tEscenario.m_aBloques[y][x-1]==5 || m_tEscenario.m_aBloques[y][x-1]==6)
				m_tEscenario.m_aBloques[y][x-1]=9;
			else
			if(m_tEscenario.m_aBloques[y][x-1]==10)
				m_tEscenario.m_aBloques[y][x-1]=1;
			else			
				m_tEscenario.m_aBloques[y][x-1]=11;
			
		break;		
		
		// X [ ]
		//[ ][ ]
		case 20:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=2;
			
			if(m_tEscenario.m_aBloques[y][x+1]==9)
				m_tEscenario.m_aBloques[y][x+1]=0;
			else
			if(m_tEscenario.m_aBloques[y][x+1]==5 || m_tEscenario.m_aBloques[y][x+1]==6)
				m_tEscenario.m_aBloques[y][x+1]=4;
			else
			if(m_tEscenario.m_aBloques[y][x+1]==11)
				m_tEscenario.m_aBloques[y][x+1]=1;
			else	
				m_tEscenario.m_aBloques[y][x+1]=10;
			
		break;		
		
		//    X
		//[ ][ ][ ]
		case 21:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=5+(x%2);
			
			if(m_tEscenario.m_aBloques[y+1][x-1]<5)
				m_tEscenario.m_aBloques[y+1][x-1]=4;
			else
				m_tEscenario.m_aBloques[y+1][x-1]=5+(x%2);
				
			if(m_tEscenario.m_aBloques[y+1][x+1]<5)
				m_tEscenario.m_aBloques[y+1][x+1]=9;
			else
				m_tEscenario.m_aBloques[y+1][x+1]=5+(x%2);
			
		break;

		//[ ] X
		//[ ][ ][ ]
		case 25:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=8;
			
			if(m_tEscenario.m_aBloques[y][x-1]==4)
				m_tEscenario.m_aBloques[y][x-1]=0;
			else
			if(m_tEscenario.m_aBloques[y][x-1]==5 || m_tEscenario.m_aBloques[y][x-1]==6)
				m_tEscenario.m_aBloques[y][x-1]=9;
			else
			if(m_tEscenario.m_aBloques[y][x-1]==10)
				m_tEscenario.m_aBloques[y][x-1]=1;
			else			
				m_tEscenario.m_aBloques[y][x-1]=11;
				
		
			if(m_tEscenario.m_aBloques[y+1][x+1]==3)
				m_tEscenario.m_aBloques[y+1][x+1]=9;
			else
				m_tEscenario.m_aBloques[y+1][x+1]=5+(x%2);
			



		break;

		//    X [ ]
		//[ ][ ][ ]
		case 26:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=7;
			
			if(m_tEscenario.m_aBloques[y+1][x-1]==2)
				m_tEscenario.m_aBloques[y+1][x-1]=4;
			else
				m_tEscenario.m_aBloques[y+1][x-1]=5+(x%2);
			
			if(m_tEscenario.m_aBloques[y][x+1]==9)
				m_tEscenario.m_aBloques[y][x+1]=0;
			else
				m_tEscenario.m_aBloques[y][x+1]=4;

		break;

		//[ ] X [ ]
		//[ ][ ][ ]
		case 30:
//		case 31:
//		case 32:
//		case 33:
//		case 36:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=14;
								
			if(m_tEscenario.m_aBloques[y][x-1]==4)
				m_tEscenario.m_aBloques[y][x-1]=0;
			else
				m_tEscenario.m_aBloques[y][x-1]=9;
			
		
			if(m_tEscenario.m_aBloques[y][x+1]==9)
				m_tEscenario.m_aBloques[y][x+1]=0;
			else
				m_tEscenario.m_aBloques[y][x+1]=4;		

		break;
	
		//[ ]   [ ]
		//[ ] X [ ]
		//[ ][ ][ ]

		/*case 34:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=14;
								
			if(m_tEscenario.m_aBloques[y][x-1]==10)
				m_tEscenario.m_aBloques[y][x-1]=1;
			else
				m_tEscenario.m_aBloques[y][x-1]=11;
			
		
			if(m_tEscenario.m_aBloques[y][x+1]==11)
				m_tEscenario.m_aBloques[y][x+1]=1;
			else
				m_tEscenario.m_aBloques[y][x+1]=10;		

		break;*/
		
			
		//[ ][ ][ ]
		//[ ] X [ ]
		//[ ][ ][ ]

		/*case 36:
			m_tEscenario.m_aBloques[y][x]=-1;
			m_tEscenario.m_aBloques[y+1][x]=14;
								
			if(m_tEscenario.m_aBloques[y][x-1]==10)
				m_tEscenario.m_aBloques[y][x-1]=1;
			else
				m_tEscenario.m_aBloques[y][x-1]=11;
			
		
			if(m_tEscenario.m_aBloques[y][x+1]==11)
				m_tEscenario.m_aBloques[y][x+1]=1;
			else
				m_tEscenario.m_aBloques[y][x+1]=10;		

		break;*/
		
		default:
		break;
	}
	
	if(y>0)
		EliminarBloque(x,y-1);
}
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CEditor::AniadirBloque(int x,int y)
{
	int i,j;
	int result=0;
	int cont=1;

	for(i=y-1;i<=y+1;i++)
		for(j=x-1;j<=x+1;j++)
		{
			if(i!=y || j!=x){
				if(i>=0 && j>=0 && m_tEscenario.m_aBloques[i][j]!=-1 && i<m_tEscenario.m_uiAlto && j<m_tEscenario.m_uiLargo)
					result+=cont;
				
				cont++;
			}
		}			
	
	//printf("cont:%d result:%d\n",cont,result);
	
	if(m_tEscenario.m_aBloques[y][x]!=-1 && result!=36)
		return;
	
	switch (result)
	{
		case 0:
			if(y==m_tEscenario.m_uiLargo-1)
				m_tEscenario.m_aBloques[y][x]=0;
				
		break;
		
		// [ ]X		
		case 4:
			m_tEscenario.m_aBloques[y][x]=9;
			
			if(m_tEscenario.m_aBloques[y][x-1]==0)
				m_tEscenario.m_aBloques[y][x-1]=4;		
			else
			if(m_tEscenario.m_aBloques[y][x-1]==3)
				m_tEscenario.m_aBloques[y][x-1]=8;
			else
				m_tEscenario.m_aBloques[y][x-1]=5+(x%2);
		break;
		
		// X[ ]		
		case 5:
			m_tEscenario.m_aBloques[y][x]=4;
			if(m_tEscenario.m_aBloques[y][x+1]==0)
				m_tEscenario.m_aBloques[y][x+1]=9;
			else
			if(m_tEscenario.m_aBloques[y][x+1]==2)
				m_tEscenario.m_aBloques[y][x+1]=7;
			else			
				m_tEscenario.m_aBloques[y][x+1]=5+(x%2);
		break;
		
		//  X
		// [ ]
		case 7:
			m_tEscenario.m_aBloques[y][x]=0;
			m_tEscenario.m_aBloques[y+1][x]=1;
		break;
		
		// [ ]X[ ]	
		case 9:
			m_tEscenario.m_aBloques[y][x]=5+(x%2);
			
			if(m_tEscenario.m_aBloques[y][x-1]==0)
				m_tEscenario.m_aBloques[y][x-1]=4;		
			else
			if(m_tEscenario.m_aBloques[y][x-1]==3)
				m_tEscenario.m_aBloques[y][x-1]=8;
			else
				m_tEscenario.m_aBloques[y][x-1]=5+(x%2);
				
			if(m_tEscenario.m_aBloques[y][x+1]==0)
				m_tEscenario.m_aBloques[y][x+1]=9;
			else
			if(m_tEscenario.m_aBloques[y][x+1]==2)
				m_tEscenario.m_aBloques[y][x+1]=7;
			else			
				m_tEscenario.m_aBloques[y][x+1]=5+(x%2);
		break;
		
		//     X
		// [ ][ ]
		
		// [ ] [ ]
		// [ ]X[ ]
		
		case 13:
			if(m_tEscenario.m_aBloques[y][x-1]==-1 && m_tEscenario.m_aBloques[y+1][x-1]!=-1)
			{
				m_tEscenario.m_aBloques[y][x]=0;
				m_tEscenario.m_aBloques[y+1][x]=11;
			
				if(m_tEscenario.m_aBloques[y+1][x-1]==4)			
					m_tEscenario.m_aBloques[y+1][x-1]=2;			
				else
				if(m_tEscenario.m_aBloques[y+1][x-1]==8)
					m_tEscenario.m_aBloques[y+1][x-1]=14;			
				else
					m_tEscenario.m_aBloques[y+1][x-1]=7;
			}
			else
			if(y==m_tEscenario.m_uiAlto-1)
			{
				m_tEscenario.m_aBloques[y][x]=14;
				if(m_tEscenario.m_aBloques[y][x-1]==1)
					m_tEscenario.m_aBloques[y][x-1]=10;
				else
					m_tEscenario.m_aBloques[y][x-1]=12+(y%2);			
			
				if(m_tEscenario.m_aBloques[y][x+1]==1)
					m_tEscenario.m_aBloques[y][x+1]=11;
				else
					m_tEscenario.m_aBloques[y][x+1]=12+(x%2);				
			}
			
		break;
		
		//  X
		// [ ][ ]
		case 15:
			m_tEscenario.m_aBloques[y][x]=0;
			m_tEscenario.m_aBloques[y+1][x]=10;
			
			if(m_tEscenario.m_aBloques[y+1][x+1]==9)			
				m_tEscenario.m_aBloques[y+1][x+1]=3;
			else
			if(m_tEscenario.m_aBloques[y+1][x+1]==7)
				m_tEscenario.m_aBloques[y+1][x+1]=14;
			else			
				m_tEscenario.m_aBloques[y+1][x+1]=8;			
				
		break;
		// [ ] X
		// [ ][ ]
		
		case 17:
			
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			
			m_tEscenario.m_aBloques[y][x]=9;
			m_tEscenario.m_aBloques[y+1][x]=11;
			
			if(m_tEscenario.m_aBloques[y][x-1]==0)
				m_tEscenario.m_aBloques[y][x-1]=4;		
			else
			if(m_tEscenario.m_aBloques[y][x-1]==3)
				m_tEscenario.m_aBloques[y][x-1]=8;
			else
				m_tEscenario.m_aBloques[y][x-1]=5+(x%2);

		break;
		
		// [ ]
		// [ ] X
		// [ ][ ]
		case 18:
		
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			m_tEscenario.m_aBloques[y][x]=3;
			m_tEscenario.m_aBloques[y+1][x]=11;
			
			if(m_tEscenario.m_aBloques[y][x-1]==1)
				m_tEscenario.m_aBloques[y][x-1]=10;
			else
				m_tEscenario.m_aBloques[y][x-1]=12+(x%2);

		break;
		
		//
		// X [ ]
		//[ ][ ]
		case 20:
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			m_tEscenario.m_aBloques[y][x]=4;
			m_tEscenario.m_aBloques[y+1][x]=10;
			
			if(m_tEscenario.m_aBloques[y][x+1]==0)
				m_tEscenario.m_aBloques[y][x+1]=9;
			else
			if(m_tEscenario.m_aBloques[y][x+1]==2)
				m_tEscenario.m_aBloques[y][x+1]=7;
			else			
				m_tEscenario.m_aBloques[y][x+1]=5+(x%2);

		break;
		
		//
		//    X
		//[ ][ ][ ]
		case 21:
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			m_tEscenario.m_aBloques[y][x]=0;
			m_tEscenario.m_aBloques[y+1][x]=12+(y%2);
			
			if(m_tEscenario.m_aBloques[y+1][x-1]==4)
				m_tEscenario.m_aBloques[y+1][x-1]=2;
			else
			if(m_tEscenario.m_aBloques[y+1][x-1]==8)
				m_tEscenario.m_aBloques[y+1][x-1]=14;
			else
				m_tEscenario.m_aBloques[y+1][x-1]=7;
				
			if(m_tEscenario.m_aBloques[y+1][x+1]==9)			
				m_tEscenario.m_aBloques[y+1][x+1]=3;
			else
			if(m_tEscenario.m_aBloques[y+1][x+1]==7)
				m_tEscenario.m_aBloques[y+1][x+1]=14;
			else			
				m_tEscenario.m_aBloques[y+1][x+1]=8;
			
		break;  
		//		[ ]
		//    X [ ]
		//   [ ][ ]
		case 23:
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
				
			m_tEscenario.m_aBloques[y][x]=2;
			m_tEscenario.m_aBloques[y+1][x]=10;
			
			if(m_tEscenario.m_aBloques[y][x+1]==1)
				m_tEscenario.m_aBloques[y][x+1]=11;
			else
				m_tEscenario.m_aBloques[y][x+1]=12+(x%2);
			
		break;

		//
		//[ ] X
		//[ ][ ][ ]
		case 25:
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			m_tEscenario.m_aBloques[y][x]=9;
			m_tEscenario.m_aBloques[y+1][x]=12+(y%2);
			
			if(m_tEscenario.m_aBloques[y+1][x+1]==9)
				m_tEscenario.m_aBloques[y+1][x+1]=3;
			else
			if(m_tEscenario.m_aBloques[y+1][x+1]==7)
				m_tEscenario.m_aBloques[y+1][x+1]=14;
			else
				m_tEscenario.m_aBloques[y+1][x+1]=8;
				
			
			if(m_tEscenario.m_aBloques[y][x-1]==0)
				m_tEscenario.m_aBloques[y][x-1]=4;
			else
			if(m_tEscenario.m_aBloques[y][x-1]==3)
				m_tEscenario.m_aBloques[y][x-1]=8;
			else
				m_tEscenario.m_aBloques[y][x-1]=5+(x%2);


		break;

		// [ ]
		// [ ] X 
		// [ ][ ][ ]
		
		//	  ó
		
		// 
		//     X [ ]
		// [ ][ ][ ]
	
		case 26:
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			if(m_tEscenario.m_aBloques[y][x-1]==-1)
			{
				m_tEscenario.m_aBloques[y][x]=4;
				m_tEscenario.m_aBloques[y+1][x]=12;
			
				if(m_tEscenario.m_aBloques[y][x+1]==0)
					m_tEscenario.m_aBloques[y][x+1]=9;
				else
				if(m_tEscenario.m_aBloques[y][x+1]==2)
					m_tEscenario.m_aBloques[y][x+1]=7;
				else			
					m_tEscenario.m_aBloques[y][x+1]=5+(x%2);

				if(m_tEscenario.m_aBloques[y+1][x-1]==4)
					m_tEscenario.m_aBloques[y+1][x-1]=2;
				else
				if(m_tEscenario.m_aBloques[y+1][x-1]==8)
					m_tEscenario.m_aBloques[y+1][x-1]=14;
				else				
					m_tEscenario.m_aBloques[y+1][x-1]=7;
			}
						
			
			else
			{
				m_tEscenario.m_aBloques[y][x]=3;				
				m_tEscenario.m_aBloques[y+1][x]=12+(y%2);
				
				if(m_tEscenario.m_aBloques[y+1][x+1]==9)
					m_tEscenario.m_aBloques[y+1][x+1]=3;
				else
				if(m_tEscenario.m_aBloques[y+1][x+1]==7)
					m_tEscenario.m_aBloques[y+1][x+1]=14;
				else
					m_tEscenario.m_aBloques[y+1][x+1]=8;
			
				if(m_tEscenario.m_aBloques[y][x-1]==1)
					m_tEscenario.m_aBloques[y][x-1]=10;
				else
					m_tEscenario.m_aBloques[y][x-1]=12+(x%2);
			}
		break;
		
		//		[ ]
		//    X [ ]
		//[ ][ ][ ]
		case 29:
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			m_tEscenario.m_aBloques[y][x]=2;
			m_tEscenario.m_aBloques[y+1][x]=12+(y%2);
			
			if(m_tEscenario.m_aBloques[y][x+1]==1)
				m_tEscenario.m_aBloques[y][x+1]=11;
			else
				m_tEscenario.m_aBloques[y][x+1]=12+(x%2);
			
			if(m_tEscenario.m_aBloques[y+1][x-1]==4)
				m_tEscenario.m_aBloques[y+1][x-1]=2;
			else
			if(m_tEscenario.m_aBloques[y+1][x-1]==8)
				m_tEscenario.m_aBloques[y+1][x-1]=14;
			else

				m_tEscenario.m_aBloques[y+1][x-1]=7;

			
		break;
		
		//[ ] X [ ]
		//[ ][ ][ ]
		case 30:			
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			m_tEscenario.m_aBloques[y][x]=5+(y%2);
			m_tEscenario.m_aBloques[y+1][x]=12+(x%2);
			
			if(m_tEscenario.m_aBloques[y][x-1]==0)
				m_tEscenario.m_aBloques[y][x-1]=4;
			else
			if(m_tEscenario.m_aBloques[y][x-1]==3)
				m_tEscenario.m_aBloques[y][x-1]=8;
			else
				m_tEscenario.m_aBloques[y][x-1]=5+(y%2);

			if(m_tEscenario.m_aBloques[y][x+1]==0)
				m_tEscenario.m_aBloques[y][x+1]=9;
			else
			if(m_tEscenario.m_aBloques[y][x+1]==2)
				m_tEscenario.m_aBloques[y][x+1]=7;
			else			
				m_tEscenario.m_aBloques[y][x+1]=5+(x%2);
					
		break;
		
		//[ ]
		//[ ] X [ ]
		//[ ][ ][ ]		
		case 31:
			if(m_tEscenario.m_aBloques[y+1][x]<0)break;
			
			m_tEscenario.m_aBloques[y][x]=8;
			m_tEscenario.m_aBloques[y+1][x]=12+(x%2);
			
			if(m_tEscenario.m_aBloques[y][x-1]==1)
				m_tEscenario.m_aBloques[y][x-1]=10;
			else
				m_tEscenario.m_aBloques[y][x-1]=12+(x%2);
			
			if(m_tEscenario.m_aBloques[y][x+1]==0)
				m_tEscenario.m_aBloques[y][x+1]=9;
			else
			if(m_tEscenario.m_aBloques[y][x+1]==2)
				m_tEscenario.m_aBloques[y][x+1]=7;
			else			
				m_tEscenario.m_aBloques[y][x+1]=5+(y%2);
				
		break;
		
		//      [ ]
		//[ ] X [ ]
		//[ ][ ][ ]		
		case 33:
			m_tEscenario.m_aBloques[y][x]=7;
			m_tEscenario.m_aBloques[y+1][x]=12+(x%2);
			
			if(m_tEscenario.m_aBloques[y][x-1]==0)
				m_tEscenario.m_aBloques[y][x-1]=4;
			else
			if(m_tEscenario.m_aBloques[y][x-1]==3)
				m_tEscenario.m_aBloques[y][x-1]=8;
			else
				m_tEscenario.m_aBloques[y][x-1]=5+(x%2);
			
			if(m_tEscenario.m_aBloques[y][x+1]==1)
				m_tEscenario.m_aBloques[y][x+1]=11;
			else
				m_tEscenario.m_aBloques[y][x+1]=12+(y%2);
				
		break;
		
		//[ ]   [ ]
		//[ ] X [ ]
		//[ ][ ][ ]		
		case 34:
			m_tEscenario.m_aBloques[y][x]=14;
			m_tEscenario.m_aBloques[y+1][x]=12+(x%2);
			
			if(m_tEscenario.m_aBloques[y][x-1]==1)
				m_tEscenario.m_aBloques[y][x-1]=10;
			else
				m_tEscenario.m_aBloques[y][x-1]=12+(y%2);			
			
			if(m_tEscenario.m_aBloques[y][x+1]==1)
				m_tEscenario.m_aBloques[y][x+1]=11;
			else
				m_tEscenario.m_aBloques[y][x+1]=12+(x%2);
				
		break;
		
		//[ ][ ][ ]
		//[ ] X [ ]
		//[ ][ ][ ]		
		case 36:		
			if(m_tEscenario.m_aBloques[y][x]==12)
				m_tEscenario.m_aBloques[y][x]=13;
			else
			if(m_tEscenario.m_aBloques[y][x]==13)
				m_tEscenario.m_aBloques[y][x]=12;
			else
				m_tEscenario.m_aBloques[y][x]=12+(y%2);;


			
		break;
		
		default:			
		break;
	}	
}
